(provide interfazAiris)

(require nucleoAiris asesorAiris/nucleoAiris.clp)
(require nucleoAiris asesorAiris/airis.clp)

(deftemplate quiereJugar
    "Indica que se quiere hacer uso del portatil para una juegos"
    (slot res (type STRING)))
(deftemplate quiereVideos
    "Indica que se quiere hacer uso del portatil para una v�deos gen�ricos"
    (slot res (type STRING))) ;;si o no
(deftemplate quiereHD
    "Indica que se quiere hacer uso del portatil para una v�deos HD"
    (slot res (type STRING))) ;;si o no
(deftemplate quiereWifi
    "Indica que se quiere dar prioridad a los portatiles que soporten m�s tipos de wifi"
    (slot res (type STRING))) ;;si o no
(deftemplate quierePotencia
    "Indica que se quiere dar prioridad a la potencia y al tama�o con respecto a la duraci�n de la bateria y el peso"
    (slot res (type STRING))) ;;si o no
(deftemplate quiereMovilidad
    "Indica que se quiere dar prioridad a la bateria y el peso con respecto a la potencia y el tama�o"
    (slot res (type STRING))) ;;si o no
(deftemplate quiereComodidad
    "Indica que se quiere dar a los port�tiles m�s grandes y por tanto m�s comodos para escribir"
    (slot res (type STRING))) ;;si o no


(defrule priorizarJuegos
    "Si se busca un port�til especialmente destinado a juegos, a�ade una serie de hechos internos que disparar�n las reglas que cambien las puntuaciones"
  	?uso <- (quiereJugar (res ?valor))
    =>
    (if (eq ?valor si) then
    	(assert (graficaBuscada (dedicada 1) (min 128)))
    	(assert (bonoGrafica (min 256) (bono 1)))
    	(assert (bonoGrafica (min 512) (bono 2)))
    	(assert (bonoRam (min 4) (bono 2)))
    	(assert (ramBuscada (min 2048)))
    	(assert (bonoPulgadas (min 13) (bono 1)))
    else
        (assert (bonoGrafica (min 128) (bono -2)))
    	(assert (bonoGrafica (min 256) (bono -2)))
    ))
(defrule priorizarVideos
    "Si se busca un port�til especialmente destinado a reproducir v�deo, a�ade una serie de hechos internos que disparar�n las reglas que cambien las puntuaciones"
    ?uso <- (quiereVideos (res ?valor))
    =>
    (if (eq ?valor si) then     
    	(assert (bonoPulgadas (min 14) (bono 2)))
    else
	    (assert (bonoPulgadas (min 13) (bono -1)))
    ))
(defrule priorizarHD
    "Si se busca un port�til especialmente destinado a reproducir v�deo HD, a�ade una serie de hechos internos que disparar�n las reglas que cambien las puntuaciones"
    ?uso <- (quiereHD (res ?valor))
    =>
    
    (if (eq ?valor si) then
        (assert (procesadorMin (hilos 2) (reloj 2000)))
    	(assert (resolucionBuscada (xMin 1920) (yMin 1080)))
    ))
(defrule priorizarWifi
    "Si se busca un port�til especialmente destinado a conectarse a redes wifi, a�ade una serie de hechos internos que disparar�n las reglas que cambien las puntuaciones"
    ?uso <- (quiereWifi (res ?valor))
    =>
    (if (eq ?valor si) then
        (assert (bonoWifi (bono 1)))
        (facts)
    ))
(defrule priorizarPotencia
    "si se quiere dar prioridad a la potencia y al tama�o con respecto a la duraci�n de la bateria y el peso, a�ade una serie de hechos internos que disparar�n las reglas que cambien las puntuaciones"
    ?uso <- (quierePotencia(res ?valor))
    =>
    (if (eq ?valor si) then
    	(assert (bonoProcesador (hilosMin 2) (relojMin 2000) (bono 10)))
    else 
        (assert (bonoBateria (horasMin ?horas) (bono 3)))
    	(assert (bonoPeso (min 1)	(bono -2)))
    	(assert (bonoPeso (min 1.5)	(bono -1)))
    	(assert (bonoPeso (min 2)	(bono -2)))
    	(assert (bonoPeso (min 3)	(bono -2)))
    ))
